package com.cll.prototype.common.util;

import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;

import java.util.ArrayList;
import java.util.List;

/**
 * 描述信息:
 *
 * @author CLL
 * @version 1.0
 * @date 2020/10/28 15:01
 */
public class IStringUtils extends StringUtils {

    /**
     * 检测字符串内容中指定字符串出现的次数,通过截取字符串实现
     * @param content   原始文本
     * @param targetStr 检测的字符串
     * @return  字符串出现的次数。-1：参数错误
     */
    public static int countNumberBySubstr(String content, String targetStr){
        if (StringUtils.isAnyBlank(content, targetStr)) {
            return -1;
        }
        int count = 0;
        while(content.contains(targetStr)) {
            content = content.substring(content.indexOf(targetStr) + targetStr.length());
            count++;
        }
        return count;
    }

    /**
     * 检测字符串内容中指定字符串出现的次数,通过替换指定字符串实现
     * @param content   原始文本
     * @param targetStr 检测的字符串
     * @return  字符串出现的次数。-1：参数错误
     */
    public static int countNumberByReplace(String content, String targetStr){
        if (StringUtils.isAnyBlank(content, targetStr)) {
            return -1;
        }
        if (targetStr.length() > content.length()) {
            return 0;
        }
        return (content.length()-content.replace(targetStr, "").length())/targetStr.length();
    }

    /**
     * 检测字符串内容中指定字符串出现的次数,通过截取字符串实现,并返回每次出现的位置
     * @param content   原始文本
     * @param targetStr 检测的字符串
     * @return 字符串每次数显的索引位置。null:标识参数错误；int[0]:标识没有出现
     */
    public static Integer[] countNumberAndReturnIndex(String content, String targetStr){
        if (StringUtils.isAnyBlank(content, targetStr)) {
            return null;
        }
        List<Integer> indexList = new ArrayList<>();
        while(content.contains(targetStr)) {
            int indexOfAfter = content.indexOf(targetStr) + targetStr.length();
            content = content.substring(indexOfAfter);
            indexList.add(indexOfAfter);
        }
        if (CollectionUtils.isEmpty(indexList)) {
            return new Integer[0];
        }
        Integer[] result = new Integer[indexList.size()];
        return indexList.toArray(result);
    }

    /**
     * 在字符串中指定的字符串后面添加指定的字符串
     * @param content   原始文本
     * @param targetStr 插入标识
     * @param params     插入字符串
     * @return  插入之后的文本
     */
    public static String insertStrAfter(String content, String targetStr, String[] params){
        if (StringUtils.isAnyBlank(content, targetStr) || null == params || 0 == params.length) {
            return content;
        }
        int countNumber = countNumberByReplace(content, targetStr);
        if (countNumber <= 0) {
            return content;
        }
        if (countNumber != params.length) {
            return content;
        }
        StringBuilder stringBuilder = new StringBuilder();
        int index = 0;
        while(content.contains(targetStr) && index < countNumber) {
            int indexOfAfter = content.indexOf(targetStr) + targetStr.length();
            String tempContent = content.substring(0, indexOfAfter);
            content = content.substring(indexOfAfter);
            stringBuilder.append(tempContent).append(params[index]);
            index++;
        }
        return stringBuilder.toString();
    }
}
